package com.dhj.yygh.api;

import com.dhj.yygh.common.result.MyResult;
import com.dhj.yygh.common.utils.AuthContextHolder;
import com.dhj.yygh.model.user.Patient;
import com.dhj.yygh.service.PatientService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.List;

@Api(tags = "就诊人管理相关接口")
@RestController
@RequestMapping("/api/user/patient")
public class PatientApiController {

    @Autowired
    PatientService patientService;

    @ApiOperation("获取就诊人列表")
    @GetMapping("/auth/findAll") // 请求路径被 auth 标识，访问此接口，必须登录
    public MyResult<List<Patient>> getPatientList(HttpServletRequest req) {
        Long userId = AuthContextHolder.getUserId(req);

        // 根据当前登录用户获取其绑定的多个就诊人信息
        List<Patient> patients = patientService.findAllByUserId(userId);

        return MyResult.ok(patients);
    }


    @ApiOperation("添加就诊人")
    @PostMapping("/auth/save")
    public MyResult savePatient(
            @RequestBody Patient patien,
            HttpServletRequest req) {

        Long userId = AuthContextHolder.getUserId(req);

        // 登录用户添加的就诊人，需要将登录用户的 id 设置到就诊人信息中
        patien.setUserId(userId);

        patientService.save(patien);

        return MyResult.ok();
    }

    // 修改就诊人信息
    @ApiOperation("修改就诊人信息")
    @PutMapping("/auth/updatePaient")
    public MyResult updatePatient(@RequestBody Patient patient) {

        // 解决前端日期少一天的问题
        Calendar calendar = new GregorianCalendar();
        calendar.setTime(patient.getBirthdate());
        calendar.add(calendar.DATE, 1); // 把日期往后增加一天,正整数往后推,负整数往前移动
        patient.setBirthdate(calendar.getTime()); // 这个时间就是日期往后推一天的结果

        patientService.updateById(patient);

        return MyResult.ok();
    }

    @ApiOperation("根据就诊人的 id 获取就诊人信息")
    @GetMapping("/auth/getPatientById/{id}")
    public MyResult<Patient> getPatient(@PathVariable("id") Long id) {

        Patient patient = patientService.getPatientById(id);

        return MyResult.ok(patient);
    }


    // 根据 id 删除就诊人
    @ApiOperation("根据 id 删除就诊人信息")
    @DeleteMapping("/deletePatientById/{id}")
    public MyResult deletePatient(@PathVariable("id") Long id) {
        patientService.removeById(id);
        return MyResult.ok();
    }
}
